package com.wb3.meta.common.enums;

/**
 * 订单枚举常亮类
 */
public interface EnumOrder {

    /**
     * 买卖类型
     */
    enum AskEnum implements EnumOrder {
        BUY(0),//买
        SELL(1);//卖

        private Integer code;

        AskEnum(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }
    }

    /**
     * 验证AskEnum合法性
     * @param key
     * @return
     */
    public static boolean isAskEnum(int key) {
        for (AskEnum e : AskEnum.values()) {
            if (e.getCode() == key) {
                return true;
            }
        }
        return false;
    }


    /**
     * Quest任务状态 状态： 0 未完成 1 完成 2 已中奖 3 未中奖 4 已领奖
     */
    enum StateEnum implements EnumOrder {
        NOTCREATE(0), //未完成
        CREATE(1), //完成
        SUCCESS(2), //已中奖
        OVERDUE(3), //未中奖
        GET(4); //已领奖

        private Integer code;

        StateEnum(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }
    }

    /**
     * Quest活动流程状态 ：0 草稿，1 已创建， 2进行中，3 完成，4 取消
     */
    enum QuestStateEnum implements EnumOrder {
        DRAFT((short)0), //草稿
        SCHEDULED((short)1), //已创建
        ONGOING((short)2), //进行中
        COMPLETED((short)3), //完成
        CANCEL((short)4), //取消
        WITHDRAW((short)5); //结束之后领取了多余奖励

        private Short code;

        QuestStateEnum(Short code) {
            this.code = code;
        }

        public Short getCode() {
            return code;
        }

        public void setCode(Short code) {
            this.code = code;
        }
    }

    /**
     * QuestGetMonthEnum
     * type： -1 获取所有参与者 1 当前月1号之前的所有数据 2 小于当前月1号 大于上个月1号之间的数据 3 本月参与人数
     */
    enum QuestGetMonthEnum implements EnumOrder {
        all(-1), //总参与人数
        lastAll(1), //本月之前总参与人数
        lastMonth(2), //上个月的参与人数
        nowMonth(3); //本月参与人数

        private Integer code;

        QuestGetMonthEnum(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }
    }

    /**
     * Quest任务 链上状态： 默认 2 待处理，0 失败  ，1 成功
     */
    enum onlineState implements EnumOrder {
        FAIL((short)0), //失败
        SUCCESS((short)1), //成功
        DEF((short)2); //待处理
        private Short code;

        onlineState(Short code) {
            this.code = code;
        }

        public Short getCode() {
            return code;
        }

        public void setCode(Short code) {
            this.code = code;
        }
    }

    /**
     * 抽奖方式 0 先到先得  1 完成任务抽奖 2 先到先抽
     */
    enum QuestAwardMethod implements EnumOrder {
        FIFO(0), //先到先得
        DRAW(1), //完成任务抽奖
        FIFD(2); //先到先抽奖
        private Integer code;

        QuestAwardMethod(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }
    }

    /**
     * 验证错误编码
     */
    enum CheckErrorCode implements EnumOrder {
        SUCCESS(0), //验证成功
        FAIL(1), //验证失败
        TWITTER_LIMIT(2), //推特频次问题
        DC_LIMIT(3), //DC限制频率
        TWITTER_NOT_BIND(4), //没绑定推特
        DC_NOT_BIND(5), //没绑定dc
        NOT_QUEST(6), //没找到活动
        NOT_QUEST_ACT(7), //没找到活动任务表
        TIME_ERROR(8), //活动未在开始时间
        PARAMS_ERROR(9), //缺少参数questConId
        SYSTEM_ERROR(10), //系统异常
        INVITE_CODE_ERROR(11), // 活动邀请码错误
        DRAW_TIME_ERROR(12), // 抽奖次数不足

        NFT_INSUFFICIENT_BALANCE(13), //nft数量不足
        TRANSACTION_AMOUNT_INSUFFICIENT_BALANCE(14), //交易次数不足
        WALLET_INSUFFICIENT_BALANCE(15), //钱包余额不足
        NO_VISIT_WEBSITE(16),//未访问指定网站
        QUESTION_ERROR(17),//问题答案不对
        SYSTEM_BUSY(18); //系统繁忙
        private Integer code;

        CheckErrorCode(Integer code) {
            this.code = code;
        }

        public Integer getCode() {
            return code;
        }

        public void setCode(Integer code) {
            this.code = code;
        }
    }

    /**
     * B端验证错误编码
     */
    enum CheckErrorCodeB implements EnumOrder {
        FAIL("1"), // 抽奖次数不足
        LIMIT("11"); // 获取NFT limit限制，繁忙请稍后再试
        private String code;

        CheckErrorCodeB(String code) {
            this.code = code;
        }

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }
    }

    /**
     * 第三方接口频率
     */
    public enum ThirdPartRate {
        /**
         * 推特 获取用户 后台配置 关注
         * https://api.twitter.com/2/users/by/username/:username
         * */
        THIRD_PART_TWITTER_GET_USER(86400000,100),

        /**
         * 推特 获取推特 后台配置 转推
         * https://api.twitter.com/2/tweets/:id
         * */
        THIRD_PART_TWITTER_GET_TWEET(900000,15),

        /**
         * 推特 获取用户 验证粉丝数量
         * https://api.twitter.com/2/users/:id
         * BY ID*/
        THIRD_PART_TWITTER_GET_USER_BY_ID(86400000,500),

        /**
         * 推特关注cd
         * https://api.twitter.com/2/users/:id/following
         * */
        THIRD_PART_TWITTER_FOLLOW_CD(900000,15),

        /**
         * 推特关注cd 70个粉丝
         * https://api.twitter.com/2/users/:id/following
         * */
        THIRD_PART_TWITTER_FOLLOWER_CD_70(900000,50),

        /**
         * 推特关注cd 70个我关注的人
         * https://api.twitter.com/2/users/:id/following
         * */
        THIRD_PART_TWITTER_FOLLOWING_CD_70(900000,500),

        /**
         * 推特转发cd
         * https://api.twitter.com/2/users/:id/tweets
         * */
        THIRD_PART_TWITTER_RETWEET_CD(900000,10),

        /**
         * 推特喜欢cd
         * https://api.twitter.com/2/tweets/:id/liking_users
         * */
        THIRD_PART_TWITTER_LIKE_CD(900000,2),

        /**
         * discord join cd
         * */
        THIRD_PART_DISCORD_CD(10000,2);

//        /** 推特是否设置头像cd */
//        THIRD_PART_TWITTER_AVATAR_CD(900000,5),
//
//        /** 推特简介cd */
//        THIRD_PART_TWITTER_PROFILE_CD(900000,5),
//
//        /** 推特是否发过推特cd */
//        THIRD_PART_TWITTER_SENDED_CD(900000,5),
//
//        /** 推特粉丝数量cd */
//        THIRD_PART_TWITTER_QUANTITY_CD(900000,5),
//
//        /** 推特绑定cd */
//        THIRD_PART_TWITTER_BIND_CD(900000,5);

        private final int cd;
        private final int count;

        ThirdPartRate(int cd, int count) {
            this.cd = cd;
            this.count = count;
        }

        public int getCd() {
            return cd;
        }

        public int getCount() {
            return count;
        }
    }
}
